// Copyright )1997 Easter-eggs. All Rights Reserved.

DefConst('kEEToolBoxUnitName, "EEToolBox");
DefConst('kEEToolBoxUnitString, "ToolBox:Eggs");
DefConst('kEEToolBoxUnitSymbol, Intern(kEEToolBoxUnitString));
DefConst('kEEToolBoxMajorVersion, 1);
DefConst('kEEToolBoxMinorVersion, 0);
DefConst('kEEToolBoxVersionString, kEEToolBoxMajorVersion & $. & kEEToolBoxMinorVersion);

DefConst('kEEToolBoxUnitDeclaration, {
			EESPrintObject: 0,
			eeLogger: 1,
			eeAgent: 2,
			EEGetSlot: 3,
			EESetSlot: 4,
		});

DeclareUnit(kEEToolBoxUnitSymbol, kEEToolBoxMajorVersion, kEEToolBoxMinorVersion, kEEToolBoxUnitDeclaration);
if kAppSymbol <> kEEToolBoxUnitSymbol then
	begin
		DeclareGlobalFn('ImpureUnitReference, 2);
		DefGlobalFn('ImpureUnitReference, constantFunctions.UnitReference);
		foreach slot, value in kEEToolBoxUnitDeclaration do
			DefConst(slot, ImpureUnitReference(kEEToolBoxUnitSymbol, slot));
	end;


DefConst('kInvalidOptionParamString, if language = 'french then
			"Option \"^0\" incorrecte"
		else
			"Invalid \"^0\" option");
DefConst('kMissingOptionParamString, if language = 'french then
			"Option \"^0\" absente"
		else
			"Missing \"^0\" option");
DefConst('kMissingOrInvalidOptionParamString, if language = 'french then
			"Option \"^0\" absente ou incorrecte"
		else
			"Missing or invalid \"^0\" option");
DefConst('kMissingPackageParamString, if language = 'french then
			"R" & kAppName & "S ne peut pas fonctionner car il manque R^0S"
		else
			"R" & kAppName & "S can't run because R^0S is missing");
DefConst('kNotImplementedString, if language = 'french then
			"Fonctionnalit non implmente"
		else
			"Feature not implemented");
DefConst('kProgrammingErrorString, if language = 'french then
			"Erreur de programmation"
		else
			"Programming error");
DefConst('kUnitRemovalApprovalString,  if language = 'french then
			"Cette opration va empcher R" & kAppName & "S de fonctionner."
		else
			"This operation will prevent R" & kAppName & "S from running.");


DefConst('EggsIsReadyToRun, func()
		begin
			local missingImports := call kMissingImportsFunc with (ObjectPkgRef('foo));
			if missingImports and Length(missingImports) > 0 then
				begin
					GetRoot():Notify(kNotifyAlert, EnsureInternal(kAppName), EnsureInternal(ParamStr(kMissingPackageParamString, [
								SPrintObject(missingImports[0].name),
							])));
					return nil;
				end;
			return true;
		end);

DeclareGlobalFn('CurrentExports, 0);

DefConst('EggsRemovalApproval, func(unitSymbol, majorVersion, minorVersion)
		begin
			local currentExports := CurrentExports();
			local unitToRemove := LFetch(currentExports, nil, 0,
					func(notUsed, export)
					export.name = unitSymbol and export.major = majorVersion and export.minor = minorVersion,
					nil);
			local packageToRemove := ObjectPkgRef(unitToRemove.exportTable);
			return if packageToRemove <> ObjectPkgRef('foo) then
						kUnitRemovalApprovalString;
		end);
